#!/usr/bin/env python
# -*- coding: utf-8 -*-#

#-------------------------------------------------------------------------------
# Name:         13-list-change.py
# Description:  
# Author:       handa
# Date:         2022/4/12
#-------------------------------------------------------------------------------

def do_stuff(four):
    four[0] = 10

four = [1,2,3,4]
print(four[0])
do_stuff(four)
print(four[0])


print("=================")
def do_stuff_1(four):
    four = [6,7,8] ## y
    print(id(four))

four = [1,2,3,4] ##  x
print(id(four))
print(four[0])
do_stuff_1(four)
print(four[0])
print(id(four))

'''这里最终打印的four[0]，依然是x指向的，y是成了局部变量，这看起来跟单改一个元素又是矛盾的

当单改list一个元素，它无论函数内外其实都是共用，这又出现一个问题，就是list的可变性，让list变成不是值传递，从而污染了变量的值

'''
'''
list元素可变，并且它不是以值传递传入函数内部被引用
'''

'''list 引用和创建
切片是重新创建listC，其余的是引用

'''

listA = [2,3]
listB = listA
listC = listA[:]
listD= list(listA)
print(id(listA))
print(id(listB))
print(id(listC))
print(id(listD))

listA[0] = 4
listB[1] = 5
print(listA)
print(listC)
print(listD)


listb=['a','b']
def changelist(lista):
        lista[0] = "c"
        return

print(listb[0])
changelist(listb)
print(listb[0])

